#ifndef TABLAINDICE_H_
#define TABLAINDICE_H_
#include <iostream>
#include "CompresorDePunteros.h"
#include "DocumentosRecuperados.h"
#define N_FRONTCODING 4

struct tabla_indice {
	int offset_lexico;
	int offset_punteros;
	unsigned short int frec;
	unsigned short int distintos;
	unsigned short int iguales;
} __attribute__((packed));

class TablaIndice {
public:
	TablaIndice();
	TablaIndice(const std::string &tabla, const std::string &path_punteros, const std::string
			&path_lexico);
	virtual ~TablaIndice();
	void set_entradas(int cantidad);
	void agregar_entrada(int offset_l, int offset_p, unsigned short int frec);
	void set_datos_frontcoding(unsigned short int distintos, unsigned short int iguales);
	void grabar(const std::string& path);
	int get_size();
	tabla_indice* get_tabla();
	void set_tabla(tabla_indice* tablita);
	void buscar(const std::string &palabra, DocumentosRecuperados* docs, int pos_termino,
			vector_consulta* consulta);
private:
	tabla_indice* tabla;
	int pos_actual;
	int entradas;
	int tamanio;
	std::string path_punteros;
	std::string path_lexico;
	bool busqueda_binaria(tabla_indice* tabla, int i, int f);
	void agregar_doc_rec(int pos, vector_consulta* consulta, DocumentosRecuperados* docs, int pos_termino);
};

#endif /* TABLAINDICE_H_ */
